MySQL システムテーブル(編集中)
#mysql
ざっくり、どのスキーマがどういう役割なのかを知った。
ただ、各々の詳細までは知らない状態。
概要
MySQLを立ち上げたときに既にあるスキーマは4つ。
mysql
sys
information_schema
performance_schema
これらのスキーマが何者で、どういうテーブルがあるのか知っておく。
mysqlスキーマ
MySQLが動作・実行するために必要な情報が格納されてるスキーマ。
権限情報だったり、ログテーブル、プラグインなどのオブジェクト情報テーブル、レプリケーション関連のテーブルなどなどが格納されてる。
MySQL自身が、例えば権限設定をした時などに、ここのスキーマ情報を管理するのだと思われる。
参考:MySQL :: MySQL 8.0 Reference Manual :: 5.3 The mysql System Schema
その中でも「データディクショナリテーブル」という、データベース全体にわたるメタデータ情報を格納するテーブルたちは要必見。
使用可能な文字セットや、使用中テーブル全ての情報、統計情報などのメタデータが格納されてる。
私もまだいまいち掴みきれてない...
MySQL :: MySQL 8.0 Reference Manual :: 5.3 The mysql System Schema
sysスキーマ
performance_schemaに収集されたデータをDBAや開発者が分析しやすいようにしたスキーマ。
psのデータをわかりやすくしたビュー
psの構成や診断レポートなどの生成を実行できるストアドプロシージャ
psの構成をクエリしてフォーマットサービスを提供するストアドファンクション
これは何言ってるんかわからん...onigiri.w2.icon
ちなみに、5.7からできた仕組みで、5.6以前は無いので気をつけてね。
参考:MySQL :: MySQL 8.0 リファレンスマニュアル :: 28 MySQL sys スキーマ
information_schema
MySQLインスタンス内の全データベースに関する情報を格納するスキーマ。
ここにあるデータはビューでしか無いので、読み取り専用ってことになる。気をつけて。
MySQL内の情報を調べる際のSHOWステートメントより詳細な情報を見たければ、このinformation_schemaにあるテーブルから直接SELECTするといいよ。
参考:MySQL :: MySQL 5.6 リファレンスマニュアル :: 21 INFORMATION_SCHEMA テーブル
performance_schema
ざっくり言ってしまえば、どのイベントがどのような行動をし、どれくらい時間かけてるのか、リソース使ってるのかの細かいところまでモニタリングできる機能だと思われる。
RDSのpeformance insightsの基盤になってる仕組みだわ。
なので以下のような感じで覚えておけばいい
MySQLにおいてクエリ関連でパフォーマンスチューニングする際に利用する詳細モニタリング機構
参考
Performance Schemaの仕組みと活用法の紹介 - freee Developers Hub
MySQL :: MySQL 5.6 リファレンスマニュアル :: 22 MySQL パフォーマンススキーマ